<template>
  <el-dialog title="机构选择" :close-on-click-modal="false" :visible.sync="visible" @close="clearDataList()" width="50vw"
             top="5vh" append-to-body>
    <el-container>
      <el-main style="height:70vh;overflow-x: hidden;">
        <el-row :gutter="20">
          <el-col :xs="24" :sm="24" :md="10">
            <div class="boxsty">
              <el-tree :data="treeData" :props="defaultProps" :filter-node-method="filterNode" class="filter-tree"
                       node-key="id" highlight-current :default-expanded-keys="[1]" accordion
                       @node-click="getNodeData">
                <span class="custom-tree-node" slot-scope="{ node, data }">
                  <el-tooltip class="item" effect="dark" content="无数据权限" placement="right-start" v-if="data.isLock">
                  <span>{{ node.label }} <i class="el-icon-lock"></i></span>
                </el-tooltip>
                <span v-if="!data.isLock">{{ node.label }}</span>
                </span>
              </el-tree>
            </div>
          </el-col>
          <el-col :xs="24" :sm="24" :md="7" v-if="showPrise">
            <div class="boxsty">
              <div class="flex titbottom">
                <el-input v-model="listQuery.name" placeholder="请输入搜索用户" style="margin-right:10px"></el-input>

                <el-button @click="btnSearch" type="primary" icon="el-icon-search" plain>搜索</el-button>

              </div>
              <div class="avue-crud">
                <el-table @row-click="handleClick" :data="tableDataDept" v-loading="tableloading" style="width: 100%">
                  <!-- <el-table-column fixed prop="userId" label="Id" width="80">-->
                  <!--/el-table-column>-->
                  <el-table-column prop="username" label="用户" width="120">
                  </el-table-column>
                  <el-table-column prop="ryName" label="姓名" min-width="150">
                  </el-table-column>
                  <!--               <el-table-column fixed="right" label="操作" width="100">-->
                  <!--                <template slot-scope="scope">-->
                  <!--                  <el-button @click="handleClick(scope.row)" type="text" size="small">添加</el-button>-->
                  <!--                </template>-->
                  <!--               </el-table-column>-->
                </el-table>
              </div>
              <div style="margin-top:20px">
                <el-pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle"
                               :current-page="page.currentPage" :page-sizes="[10, 20, 50, 100]"
                               :page-size="page.pageSize" :total="page.total" background
                               layout="total, sizes, prev, pager, next">
                  <!-- , jumper -->
                </el-pagination>
              </div>
            </div>
          </el-col>
          <el-col :xs="24" :sm="24" :md="14">
            <div class="boxsty" v-if="showPrisehidden">
              <!--             原来是叫【已选择机构】在合同创建受约人的地方不对，所以改成【已选择人员】-->
              <div class="tabletext titbottom">已选择人员</div>
              <div class="avue-crud">
                <el-table :data="tableDataUser" ref="ry-table" stripe>
                  <el-table-column prop="userName" label="姓名" width="100">
                  </el-table-column>
                  <el-table-column prop="deptName" label="部门" min-width="220"></el-table-column>
                  <el-table-column fixed="right" label="操作" width="100">
                    <template slot-scope="scope">
                      <el-button @click="delUserList(scope.$index)" type="danger" plain>删除</el-button>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
            </div>

            <div class="boxsty" v-if="showRentPrise">
              <!--             原来是叫【已选择人员】在合同创建受约人的地方不对，所以改成【已选择机构】-->
              <div class="tabletext titbottom">已选择机构</div>
              <div class="avue-crud">
                <el-table :data="tableDataUser" ref="ry-table" stripe>
                  <el-table-column prop="jigouName" label="机构名称" width="300"></el-table-column>
                  <el-table-column label="操作" width="100">
                    <template slot-scope="scope">
                      <el-button @click="delUserList(scope.$index)" type="danger" plain>删除</el-button>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
            </div>
          </el-col>
        </el-row>
      </el-main>
    </el-container>
    <span slot="footer" class="dialog-footer">
      <!-- <el-button type="primary" @click="exportExcel" style="float: left">导出已选人员</el-button> -->
      <el-button type="primary" plain @click="btnCancel">取消</el-button>
      <el-button type="primary" v-if="canSubmit" @click="btnSave">确定</el-button>
    </span>
  </el-dialog>
</template>

<script>

import store from '@/store'
import {fetchTree} from '@/api/admin/dept'
import {fetchList} from '@/api/admin/user'
import {fayuetree} from '@/api/hetongrenwu/hetongyeji/hetongnd'
import {shouyuetree} from '@/api/hetongrenwu/hetongyeji/hetongnd'
import {selHzBmList, savelist, removeByHzId} from '@/api/ceping/cepinghzgldxpzb'
import { getKpiTreeAll,getKpiTreeAllNew } from "@/api/dailyExamine/targetExamine/createAssessment";
import {validatenull} from "@/util/validate";
import {
    getLdList
} from "@/api/dailyExamine/eventExamine/event.js";
export default {
  data() {
    return {
      token: '',
      type: '',
      qjDeptId: '', //全局部门id
      qjGzId: "", //全局规则id
      tableloading: false, //table遮挡
      showPrise: true,
      showPrisehidden: true,
      showRentPrise: false,
      visible: false,
      canSubmit: false,
      tableDataDept: [],
      tableDataUser: [],
      ldList:[],
      dataForm: {},
      listQuery: {
        name: ''
      },
      treeData: [],
      jgtreeData: [],
      defaultProps: {
        children: 'children',
        label: 'name'
      },
      page: {
        total: 0, // 总页数
        currentPage: 1, // 当前页数
        pageSize: 20, // 每页显示多少条,
        isAsc: false // 是否倒序
      },
      searchForm: {},
      zdySearchForm: {},
      nodeKey: [],
    }
  },
  created() {
    // this.getList();
  },
  methods: {
    init(id, type, jsonData) {
      this.token = store.getters.access_token;
      this.type = type;
      this.qjGzId = id;
      this.visible = true;
      this.canSubmit = true;
      //this.loadTableDataUser(id);
      this.getList();
      this.clearDataList();
      //console.log("666:"+JSON.stringify(jsonData))
      this.reloadTableDataUser(type, jsonData);
    },
    reloadTableDataUser(type, jsonData) {
      var jsonObj = JSON.parse(jsonData) || [];
      //console.log(JSON.parse(jsonData))
      for (var i = 0; i < jsonObj.length; i++) {
        let objUser = {};
        objUser["userId"] = jsonObj[i].userId;
        objUser["deptName"] = jsonObj[i].deptName;
        objUser["fayueName"] = jsonObj[i].userName;
        objUser["fayueZhiwu"] = jsonObj[i].userZw == null ? jsonObj[i].fayueZhiwu : jsonObj[i].userZw;
        objUser["shouyueName"] = jsonObj[i].userName;
        objUser["shouyueZhiwu"] = jsonObj[i].userZw == null ? jsonObj[i].fayueZhiwu : jsonObj[i].userZw;
        objUser["cyrName"] = jsonObj[i].userName;
        objUser["cyrydepartname"] = jsonObj[i].userZw == null ? jsonObj[i].fayueZhiwu : jsonObj[i].userZw;
        objUser["shrName"] = jsonObj[i].userName;
        objUser["shrZhiwu"] = jsonObj[i].userZw == null ? jsonObj[i].fayueZhiwu : jsonObj[i].userZw;
        objUser["userLx"] = jsonObj[i].userLx;
        objUser["userName"] = jsonObj[i].userName;
        if (this.type == 'jg') {
          objUser["deptId"] = jsonObj[i].deptId;
        } else {
          objUser["deptId"] = jsonObj[i].deptId;
        }

        objUser["jigouName"] = jsonObj[i].jigouName;

        this.tableDataUser.push(objUser);
        //console.log("888："+JSON.stringify(this.tableDataUser))
      }
    },
    //查询被测评对象
    loadTableDataUser(id) {
      selHzBmList(id).then(data => {
        var obj = data.data.data;
        if (obj) {
          for (var i = 0; i < obj.length; i++) {
            this.tableDataUser.push({
              id: obj[i].id,
              hzId: obj[i].hzId,
              userId: obj[i].userId,
              userName: obj[i].userName,
              deptId: obj[i].deptId,
              deptName: obj[i].deptName,
              userZw: obj[i].userZw,
              userLx: obj[i].userLx,
              userDeptId: obj[i].userDeptId,
              userDeptName: obj[i].userDeptName,
              bhzPx: obj[i].bhzPx,
            });
          }
        }
      }).catch(() => {
        this.$notify.closeAll();
        this.$notify.error('数据错误')
      });
    },
    getList() {
//更改获取树结构的方法
      getKpiTreeAllNew().then(response => {
            if(response.data.data == "allTree"){
                if(this.type == 'jg'){
                    this.showPrise = false // 机构人员隐藏
                    this.showPrisehidden = false // 右侧添加人隐藏
                    this.showRentPrise = true // 右侧添加机构显示
                }
                fetchTree().then(res => {
                    this.treeData = res.data.data;
                });
            }else{
                this.treeData=this.resetTreeData(response.data.data,[]);
                if(this.type == 'jg'){
                    this.showPrise = false // 机构人员隐藏
                    this.showPrisehidden = false // 右侧添加人隐藏
                    this.showRentPrise = true // 右侧添加机构显示
                }else if(['fy','sy','bkhr'].includes(this.type)){
                    this.showPrise = true // 机构人员显示
                    this.showPrisehidden = true  //右侧添加人显示
                    this.showRentPrise = false // 机构隐藏
                }
            }
      /*fetchTree(this.listQuery).then(response => {*/
        //this.treeData = response.data.data;
        //重组只显示不带锁的

      })
      return false;
      //不明白下面为什么这么写，是不是有什么重要意义，所以先保留代码，不执行，现在获取组织机构树结构的接口换成系统自带的那个
      if (this.type == 'fy') {
        fayuetree(this.listQuery).then(response => {
          this.treeData = response.data.data;
          //this.treeData=this.jiequ(this.treeData)
          this.treeData = response.data.data
          this.showPrise = true // 机构人员显示
          this.showPrisehidden = true  //右侧添加人显示
          this.showRentPrise = false // 机构隐藏
        })
      } else if (this.type == 'sy') {
        shouyuetree(this.listQuery).then(response => {
          this.treeData = response.data.data
          this.showPrise = true // 机构人员显示
          this.showPrisehidden = true  //右侧添加人显示
          this.showRentPrise = false // 机构隐藏
        })
      } else if (this.type == 'jg') {
        shouyuetree(this.listQuery).then(response => {
          this.treeData = response.data.data
          this.showPrise = false // 机构人员隐藏
          this.showPrisehidden = false // 右侧添加人隐藏
          this.showRentPrise = true // 右侧添加机构显示
        })
      } else if (this.type == 'bkhr') {
        shouyuetree(this.listQuery).then(response => {
          this.treeData = response.data.data
          this.showPrise = true // 机构人员显示
          this.showPrisehidden = true  //右侧添加人显示
          this.showRentPrise = false // 机构隐藏
        })
      }
      if (this.type == 'cyr' || this.type == 'shr' || this.type == 'dfr') {//參與人
        fayuetree(this.listQuery).then(response => {
          this.treeData = response.data.data
        })
      }
      if (this.type == 'zxshr') {//专项审核
        fayuetree(this.listQuery).then(response => {
          this.treeData = response.data.data
        })
      }
    },
    //重组树结构
    resetTreeData(arr,newArr){
      arr.forEach(item=>{
        if(item.isLock){
          item.children.forEach(child=>{
            if(child.isLock){
              this.resetTreeData(item.children,newArr)
            }else{
              var obj=newArr.find(newItem=>newItem.id==child.id)
              if(!obj){
                newArr.push(child)
              }
            }
          })
        }else{
          const childArr=item.children.filter(child=>child.isLock==false);
          item.children.forEach(child=>{
            if(child.isLock){
              this.resetTreeData(item.children,childArr)
            }else{
              var obj=childArr.find(newItem=>newItem.id==child.id)
              if(!obj){
                childArr.push(child)
              }
            }
          })
          item.children=childArr;
          var findObj=newArr.find(newItem=>newItem.id==item.id)
          if(!findObj){
            newArr.push(item)
          }
        }
      })
      return newArr;
    },
    jiequ(data) {
      const result = data.map(item => {
        const children = item.children.map(every => {
          return {
            id: every.id,
            parentId: every.parentId,
            name: every.name,
            deptName: every.deptName,
            deptCode: every.deptCode,
            isLock: every.isLock,
          };
        })
        return {
          ...item,
          children: children
        };
      })
      return result

    },
    filterNode(value, data) {

      if (!value) return true
      return data.label.indexOf(value) !== -1
    },
    getPersons(page, params) {
      this.tableloading = true;
      fetchList(Object.assign({
        current: page.currentPage,
        size: page.pageSize
      }, params, this.searchForm, this.zdySearchForm)).then(response => {
        // this.list = response.data.data.records
        this.tableDataDept = response.data.data.records
        this.page.total = response.data.data.total
        this.tableloading = false;
        ////console.log(this.tableDataDept);
      }).catch(err => {
        this.tableloading = false;
      })
    },
    getNodeData(data) {
      if (this.type != "jg") {
        this.page.currentPage = 1
        this.qjDeptId = data.id;
        this.getPersons(this.page, {
          deptId: data.id
        })
      } else {
        this.handleClick(data);
      }

    },
    //选人添加到右边的框
    handleClick(vm) {
      //console.log(vm)
      //console.log(this.tableDataUser)
      if (this.type != 'jg') {
        for (var i = 0; i < this.tableDataUser.length; i++) {
          if (this.tableDataUser[i].userId == vm.userId) {
            return;
          }
        }
      }
      if (this.type == 'jg') {
        for (var i = 0; i < this.tableDataUser.length; i++) {
          if (this.tableDataUser[i].deptId == vm.id) {
            //console.log("sssss")
            return;
          }
        }
      }
      let objUser = {};
      objUser["hzId"] = this.qjGzId;
      objUser["userId"] = vm.userId;
      if (this.type == 'fy') {
        objUser["fayueName"] = vm.ryName;
        objUser["fayueZhiwu"] = validatenull(vm.ryZw) ? '-' : vm.ryZw;
      } else if (this.type == 'sy') {
        objUser["shouyueName"] = vm.ryName;
        objUser["ryZjmc"] = vm.ryZjmc;
        objUser["shouyueZhiwu"] = validatenull(vm.ryZw) ? '-' : vm.ryZw;
      } else if (this.type == 'bkhr') {
        objUser["beikaoheName"] = vm.ryName;
        objUser["beikaoheZhiwu"] = validatenull(vm.ryZw) ? '-' : vm.ryZw;
      }
      if (this.type == 'jg') {
        objUser["jigouName"] = vm.name;
        objUser["userName"] = vm.name;
        objUser["deptId"] = vm.id;
      } else {
        objUser["userName"] = vm.ryName;
        objUser["deptId"] = vm.deptId;
      }
      if (this.type == 'cyr') {
        objUser["cyrName"] = vm.ryName;
        objUser["cyrydepartname"] = validatenull(vm.ryZw) ? '-' : vm.ryZw;
      }
      if (this.type == 'zxshr') {
        objUser["shrName"] = vm.ryName;
        objUser["shrZhiwu"] = validatenull(vm.ryZw) ? '-' : vm.ryZw;
      }
      objUser["userName"] = vm.ryName;
      objUser["deptName"] = vm.deptName;
      objUser["userZw"] = validatenull(vm.ryZw) ? '-' : vm.ryZw;
      objUser["type"] = this.type;
      objUser["userLx"] = "个人";
      //console.log(objUser)
      this.tableDataUser.unshift(objUser);
      //console.log(this.tableDataUser)
    },
    //删除人员list
    delUserList(index) {
      this.tableDataUser.splice(index, 1);
    },
    //清空记录
    clearDataList() {
      this.qjDeptId = '';
      this.tableDataDept = [];
      this.tableDataUser = [];
    },
    //保存人员
    btnSave() {
      this.canSubmit = false;
      this.visible = false;
      let deptId ="";
      this.tableDataUser.forEach((ele)=>{
          deptId+=ele.deptId+",";
      })
      deptId=deptId.slice(0,deptId.length-1);
      getLdList(
          Object.assign({
          deptIds:deptId
      })
      ).then(r => {

          var params = {
              ldList: r.data.data,
              type: this.type
          }

          this.$emit('submitfy', params);
      }).catch(error => {
          console.log(error);
      });

     /* var params = {
        tableDataUser: this.tableDataUser,
        type: this.type
      }

      this.$emit('submitfy', params);*/
      //this.tableDataUser;
    },
    // tree搜索事件,搜索人
    btnSearch() {
      let param = {
        deptId: this.qjDeptId
      }

      if (this.listQuery.name.trim() !== '') {
        param['username'] = this.listQuery.name.trim();
        param['ryName'] = this.listQuery.name.trim();
      }
      this.getPageUsers(param);
    },
    // 分页
    // 每页数
    sizeChangeHandle(val) {
      this.page.pageSize = val
      this.page.currentPage = 1
      this.getPageUsers()
    },
    // 当前页
    currentChangeHandle(val) {
      this.page.currentPage = val
      this.getPageUsers()
    },
    //分页刷新
    getPageUsers(vm) {
      if (vm) {
        this.getPersons(this.page, vm)
      } else {
        this.getPersons(this.page, {
          deptId: this.qjDeptId
        })
      }
    },
    //取消按钮
    btnCancel() {
      this.visible = false;
      this.clearDataList();
    },
    /**
     * excel 导出
     */
    exportExcel() {
      try {
        // 导出
        require.ensure([], () => {
          const {
            export_json_to_excel
          } = require("@/util/Export2Excel");
          const tHeader = "用户,姓名,部门".split(",");
          const filterVal = "xsUserName,ryName,deptName".split(",");
          const list = this.tableDataUser.map(column =>
            filterVal.map(header => {
              return column[header];
            })
          );
          export_json_to_excel(tHeader, list, "已选人员名单");
        });
      } catch (e) {
        if (typeof console !== 'undefined') console.error(e)
      }
    },
    //判空
    validatenull(val) {
      return validatenull(val)
    }
  }
}

</script>

<style scoped>
</style>
